package com.heima.schedule.feign;

import com.heima.apis.schedule.IScheduleClient;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.schedule.dtos.Task;
import com.heima.schedule.service.TaskService;
import com.mysql.jdbc.log.Log;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

//相当于把下面的controller接口注册到leadnews-feign-api里面，以提供给其它微服务调用
//其它微服务调用leadnews-feign-api里的服务的方法：
// 1.在其启动类里添加 @EnableFeignClients("com.heima.apis")
// 2.在Impl类里@Autowired IScheduleClient scheduleClient;
// 3.调用scheduleClient.addTask(xxx);

@Slf4j
@RestController
public class ScheduleClient implements IScheduleClient {

    @Autowired
    private TaskService taskService;

    /**
     * 添加延时任务
     * @param task
     * @return
     */
    @Override
    @PostMapping("/api/v1/task/add")
    public ResponseResult addTask(@RequestBody Task task) {//因为参数是一个请求体，所以用@RequestBody注解
        //WmNewsTaskServiceImpl里的addNewsToTask使用了
        // scheduleClient.addTask(task);添加了文章定时审核任务到延迟服务中
        log.info("远程调用ScheduleClient.addTask添加了<{}>任务到延迟任务中", task);
        return ResponseResult.okResult(taskService.addTask(task));
    }

    /**
     * 取消任务
     * @param taskId
     * @return
     */
    @Override
    @GetMapping("/api/v1/task/{taskId}")
    public ResponseResult cancelTask(@PathVariable long taskId) {
        return ResponseResult.okResult(taskService.cancelTask(taskId));
    }

    /**
     * 按照类型和优先级拉任务(消费任务)
     * @param type
     * @param priority
     * @return
     */
    @Override
    @GetMapping("/api/v1/task/{type}/{priority}")
    public ResponseResult poll(@PathVariable("type") int type,
                               @PathVariable("priority") int priority) {
        //WmNewsTaskServiceImpl里的scanNewsByTask使用了
        // scheduleClient.poll(TaskTypeEnum.NEWS_SCAN_TIME.getTaskType(),
        // TaskTypeEnum.NEWS_SCAN_TIME.getPriority());拉取了审核文章的任务
        log.info("远程调用scheduleClient.poll拉取了类型为<{}>的任务到延迟任务中", type);
        System.out.println("拉取了远程任务：" + type + ":" + priority);
        return ResponseResult.okResult(taskService.poll(type,priority));
    }
}
